﻿using System;
using System.Web;
using System.Web.Mvc;
using Kendo.Mvc.Extensions;
//importamos
using EventSys.BussinesEntities;//modelos
using EventSys.BussinesLogic;
using Microsoft.Practices.Unity;

using System.IO;
using System.Collections.Generic;
//using Kendo.Mvc.UI;
using System.Drawing;

namespace EventSys.MVC4Web.Controllers
{
    
    public class EventoController : Controller
    {
        [Dependency]
        public IEventoService eventoService { get; set; }

        [Dependency]
        public IAuspiciadorService auspiciadorService { get; set; }

        [Dependency]
        public ITipoActividadService tipoActividadService { get; set; }

        [Dependency]
        public IEstadoService estadoService { get; set; }       

        [Dependency]
        public IActividadService actividadService { get; set; }

        [Dependency]
        public IAmbienteService ambienteService { get; set; }

        // GET: /Evento/
        //public ActionResult Index()
        //{

        //    var lista = eventoService.GetAllFromEventos().Take(0);

        //    return View(lista);
        //}

        public ActionResult Index(Int32? page)
        {
            var pageNumber = page ?? 1;
            var lista = eventoService.GetAllFromEventos(pageNumber, 4);
            return View(lista);
        }

        [HttpPost]
        public ActionResult Index(string criterio)//, Int32? page)
        {
            //var pageNumber = page ?? 1;
            var lista = eventoService.GetEventosByCriterio(criterio);
            return View(lista);
        }
        //[HttpPost]
        public ActionResult viewActividads(int id)//, Int32? page)
        {
            //var pageNumber = page ?? 1;
            var detalle = actividadService.GetActividadByIdEvent(id);//,pageNumber,4);

            return PartialView("_viewActividads", detalle);
        }

        //[HttpPost]
        //public ActionResult viewActividads(string criterio)//, Int32? page)
        //{
        //    //var detalle = actividadService.GetActividadByIdEvent(id);//,pageNumber,4);
        //    var findActividad = actividadService.GetActividadByCriterio(criterio);

        //    return PartialView("_viewActividads", findActividad);
        //}


        ////******************  CREAR  *******************//
        public ActionResult Create()
        {
            var tipoActividad = tipoActividadService.GetFromAllTipoActividad();
            ViewData["idTipoEvento"] = new SelectList(tipoActividad, "idTipoActividad", "Descripcion");

            var estado = estadoService.GetFromAllEstado();
            ViewData["idEstado"] = new SelectList(estado, "idEstado", "Estado1");

            return View();
        }

        [HttpPost]
        public ActionResult Create(Evento evento, HttpPostedFileBase image)
        {
            //if (ModelState.IsValid)
            //{
            if (image != null)
            {
                evento.ImageMimeType = image.ContentType;
                int length = image.ContentLength;
                byte[] buffer = new byte[length];
                image.InputStream.Read(buffer, 0, length);

                evento.Logo= buffer;
                //}

                eventoService.AddEvento(evento);
                return RedirectToAction("Create", "Actividad");//,ultimoEvento);
            }

            //return View("Create"); 

            return RedirectToAction("Index");
        }

        ////******************  EDITAR  *******************//
        public ActionResult Edit(int id)//, string nombre)
        {
            var evento = eventoService.GetEventoById(id);

            //var nom = nombre;

            //var tipoActividad = from tp in tipoActividadService.GetFromAllTipoActividad()
            //                    select new { Text = tp.Descripcion, Value = tp.idTipoActividad };

            var tipoActividad = tipoActividadService.GetFromAllTipoActividad();
            ViewData["idTipoEvento"] = new SelectList(tipoActividad, "idTipoActividad", "Descripcion", evento.idTipoEvento);

            var estado = estadoService.GetFromAllEstado();
            ViewData["idEstado"] = new SelectList(estado, "idEstado", "Estado1", evento.idEstado);

            return View(evento);
        }

        [HttpPost]
        public ActionResult Edit(Evento evento)
        {
            eventoService.UpdateEvento(evento);

            return RedirectToAction("Index");
        }




        // *****************   IMGEN    ******************
        public byte[] imageToByteArray(Image imageIn)
        {
            MemoryStream ms = new MemoryStream();
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            return ms.ToArray();
        }

        public Image byteArrayToImage(byte[] byteArrayIn)
        {
            MemoryStream ms = new MemoryStream(byteArrayIn);
            Image returnImage = Image.FromStream(ms);
            return returnImage;
        }

        //para previsualizar la imagen
        public ActionResult Preview(string file)
        {
            Participante participante = new Participante();
            var path = ControllerContext.HttpContext.Server.MapPath("/");
            if (System.IO.File.Exists(Path.Combine(path, file)))
            {
                return File(Path.Combine(path, file), "image/jpeg");
            }
            return new HttpNotFoundResult();
        }

        //---------------------------
        
        //public ActionResult RowTemplate()
        //{
        //    return View();
        //}
        
        //public ActionResult RowTemplate_Read([DataSourceRequest] DataSourceRequest request)
        //{
        //    return Json(eventoService.GetEventos().ToDataSourceResult(request));
        //}



        ////******************  CREAR  *******************//
        public ActionResult CreateAct(int id)
        {
            var tipoActividad = tipoActividadService.GetFromAllTipoActividad();
            ViewData["IdTipoActividad"] = new SelectList(tipoActividad, "idTipoActividad", "Descripcion");

            var ambiente = ambienteService.GetFromAllAmbiente();
            ViewData["idAmbiente"] = new SelectList(ambiente, "idAmbiente", "Descripcion");

            //enviamos el ultimo id de evento creado
            Actividad data = new Actividad();
            data.idEvento = id;

            return View(data);
        }

        [HttpPost]
        public ActionResult CreateAct(Actividad actividad)
        {
            actividadService.AddActividad(actividad);

            return RedirectToAction("Index");
        }


    }
}

